<link rel="import" href="../polymer/polymer.html">
<link rel="import" href="../iron-icons/iron-icons.html">
<link rel="import" href="chops-button.html">

<dom-module id="chops-copy-to-clipboard">
  <template>
    <chops-button id="button" title$="copy '[[content]]' to the clipboard" on-click="_copyToClipboard">
       <iron-icon icon="[[icon]]"></iron-icon>
    </chops-button>
    <textarea hidden id="contentDiv">[[content]]</textarea>
  </template>
  <script>
    'use strict';

    /**
     * `<chops-copy-to-clipboard>`
     *
     *   ChopsCopyToClipboard adds a button to copy some data to the clipboard.
     *
     * @customElement
     * @polymer
     * @demo /demo/chops-copy-to-clipboard_demo.html
     */
    class ChopsCopyToClipboard extends Polymer.Element {
      static get is() { return 'chops-copy-to-clipboard'; }

      static get properties() {
        return {
          content: {
            type: String,
            value: '',
          },
          icon: {
            type: String,
            value: 'content-copy'
          }
        }
      }

      _copyToClipboard() {
        // First, preserve any existing selection the user has made.
        const ranges = [];
        const sel = window.getSelection();
        for (let i = 0; i < sel.rangeCount; i++) {
          ranges.push(sel.getRangeAt(0));
        }

        // Copy data to the clipboard.
        // TODO(seanmccullough): Look for a less hacky way to do this.
        // It doesn't cause any visual flickering, just based on manual
        // testing though.  The Clipboard API is cleaner but requires
        // prompting the user for special permissions.
        this.$.contentDiv.hidden = false;
        this.$.contentDiv.select();
        document.execCommand('copy');
        this.$.contentDiv.hidden = true;

        // Restore any existing selection the user has made.
        sel.removeAllRanges();
        ranges.forEach((range) => {
          sel.addRange(range);
        });
      }
    }

    customElements.define(ChopsCopyToClipboard.is, ChopsCopyToClipboard);
  </script>
<dom-module>
